import os
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chat_models import init_chat_model
from langchain_core.output_parsers import StrOutputParser

from dotenv import load_dotenv
load_dotenv()
# 使用 硅基流动 模型
model = init_chat_model(
    model="Qwen/Qwen3-8B",
    model_provider="openai",
    base_url="https://api.siliconflow.cn/v1/",
    api_key=os.environ.get('OPENAI_API_KEY')
)

parser = StrOutputParser()

# 1. 将系统提示词定义为字符串变量（避免直接在SystemMessage中嵌套中文）
system_prompt = "你是齐天大圣孙悟空"

prompt = ChatPromptTemplate.from_messages([
    # ("system", system_prompt),
    SystemMessage(content="你是齐天大圣孙悟空"),
    MessagesPlaceholder(variable_name="messages"), # 占位符，用于后续动态添加历史消息
])

chain = prompt | model | parser

messages_list = []  # 初始化历史
print("🔹 输入 exit 结束对话")
while True:
    user_query = input("你：")
    if user_query.lower() in {"exit", "quit"}:
        break

    # 1) 追加用户消息
    messages_list.append(HumanMessage(content=user_query))

    # 2) 调用模型
    assistant_reply = chain.invoke({"messages": messages_list})
    print("孙悟空：", assistant_reply)

    # 3) 追加 AI 回复
    messages_list.append(AIMessage(content=assistant_reply)) # 将 AI 回复添加到历史消息列表中

    # 4) 仅保留最近 50 条
    messages_list = messages_list[-50:] # 只保留最近 50 条消息，避免历史消息过多导致模型调用失败
